home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / gui / mui23dev.lha / MUI / Developer / Oberon / examples / PopupDemo.mod < prev   
Text File  |  1994-12-21  |  10KB  |  174 lines

  1. MODULE  PopupDemo;
  2.  
  3. IMPORT
  4.   ASL,
  5.   Dos,
  6.   e := Exec,
  7.   m := Mui,
  8.   mb := MuiBasics,
  9.   u := Utility,
  10.   y := SYSTEM;
  11.  
  12.  
  13.   PROCEDURE StrObjFunc*( h : mb.Hook; pop : m.Object; str : mb.Args ):LONGINT;
  14.     VAR x, s : e.STRPTR;
  15.         i : INTEGER;
  16.     BEGIN
  17.       mb.Get( y.VAL( m.Object, str ), m.aStringContents, s );
  18.       i := 0;
  19.       LOOP
  20.         m.DoMethod( pop, m.mListGetEntry, i, y.ADR( x ) );
  21.         IF x = NIL THEN
  22.           mb.Set( pop, m.aListActive, m.vListActiveOff );
  23.           EXIT;
  24.         ELSIF (x^ = s^) THEN
  25.           mb.Set( pop, m.aListActive, i );
  26.           EXIT;
  27.         END;
  28.         INC( i );
  29.       END;
  30.       RETURN e.true;
  31.     END StrObjFunc;
  32.  
  33.   PROCEDURE ObjStrFunc(h : mb.Hook; pop : m.Object; str : mb.Args ):LONGINT;
  34.     VAR x : e.STRPTR;
  35.     BEGIN
  36.       m.DoMethod( pop, m.mListGetEntry, m.vListGetEntryActive, y.ADR( x ) );
  37.       mb.Set( y.VAL( m.Object, str ), m.aStringContents, x );
  38.       RETURN e.true;
  39.     END ObjStrFunc;
  40.  
  41.   PROCEDURE WindowFunc(h : mb.Hook; pop : m.Object; win : mb.Args ):LONGINT;
  42.     BEGIN
  43.       mb.Set( y.VAL( m.Object, win ), m.aWindowDefaultObject, pop );
  44.       RETURN e.true;
  45.     END WindowFunc;
  46.  
  47. TYPE  PopNames = ARRAY 20 OF e.STRPTR;
  48.  
  49. CONST popNames = PopNames(
  50.           y.ADR( "Stefan Becker" ),
  51.           y.ADR( "Martin Berndt" ),
  52.           y.ADR( "Dirk Federlein" ),
  53.           y.ADR( "Georg Heßmann" ),
  54.           y.ADR( "Martin Horneffer" ),
  55.           y.ADR( "Martin Huttenloher" ),
  56.           y.ADR( "Kai Iske" ),
  57.           y.ADR( "Oliver Kilian" ),
  58.           y.ADR( "Franke Mariak" ),
  59.           y.ADR( "Klaus Melchior" ),
  60.           y.ADR( "Armin Sander" ),
  61.           y.ADR( "Matthias Scheler" ),
  62.           y.ADR( "Andreas Schildbach" ),
  63.           y.ADR( "Wolfgang Schildbach" ),
  64.           y.ADR( "Christian Scholz" ),
  65.           y.ADR( "Markus Stipp" ),
  66.           y.ADR( "Ibrahim Solmaz" ),
  67.           y.ADR( "Henri Veistera" ),
  68.           y.ADR( "Albert Weinert" ),
  69.           NIL );
  70.  
  71.  
  72. VAR
  73.   StrObjHook, ObjStrHook, WindowHook : mb.Hook;
  74.   app, window, pop1, pop2, pop3, pop4, pop5, plist : m.Object;
  75.   signals : LONGSET;
  76.   running : BOOLEAN;
  77.   active : LONGINT;
  78. BEGIN
  79.   running := TRUE;
  80.   StrObjHook := mb.MakeHook( StrObjFunc );
  81.   ObjStrHook := mb.MakeHook( ObjStrFunc );
  82.   WindowHook := mb.MakeHook( WindowFunc );
  83.   mb.ApplicationObject( m.aApplicationTitle,      y.ADR( "Popup-Demo" ),
  84.                         m.aApplicationVersion,    y.ADR( "$VER: Popup-Demo_Oberon 1.0 (19.08.94)" ),
  85.                         m.aApplicationCopyright,  y.ADR( "© 1993-94 Stefan Stuntz/Albert Weinert" ),
  86.                         m.aApplicationAuthor,     y.ADR( "Stefan Stuntz/Albert Weinert" ),
  87.                         m.aApplicationDescription,y.ADR( "Demonstrate popup objects."),
  88.                         m.aApplicationBase,       y.ADR( "POPUP" ),
  89.                         u.done );
  90.     mb.SubWindow; mb.WindowObject( m.aWindowTitle, y.ADR( "Popup Objects" ),
  91.                                           m.aWindowID, 1234,
  92.                                           u.done );
  93.                     mb.WindowContents; mb.VGroup;
  94.                                          mb.Child; mb.ColGroup( 2 );
  95.                                                      mb.Child; mb.keyLabel2("File:", "f");
  96.                                                      mb.Child; mb.PopaslObject;
  97.                                                                  mb.Tag( m.aPopstringString); mb.keyString(NIL, 256, "f" );
  98.                                                                  mb.Tag( m.aPopstringButton); mb.popButton(m.iPopFile);
  99.                                                                  mb.TagItem( ASL.titleText, y.ADR( "Please selecte a file...") );
  100.                                                                pop1 := mb.End();
  101.                                                      mb.Child; mb.keyLabel2("Drawer:", "d");
  102.                                                      mb.Child; mb.PopaslObject;
  103.                                                                  mb.Tag( m.aPopstringString); mb.keyString(NIL, 256, "d" );
  104.                                                                  mb.Tag( m.aPopstringButton); mb.popButton(m.iPopDrawer);
  105.                                                                  mb.TagItem2( ASL.titleText, y.ADR( "Please selecte a file..."),
  106.                                                                               ASL.frDrawersOnly, e.true );
  107.                                                                pop2 := mb.End();
  108.                                                      mb.Child; mb.keyLabel2("Font:", "f");
  109.                                                      mb.Child; mb.PopaslObject;
  110.                                                                  mb.Tag( m.aPopstringString); mb.keyString(NIL, 256, "f" );
  111.                                                                  mb.Tag( m.aPopstringButton); mb.popButton(m.iPopUp);
  112.                                                                  mb.TagItem2( m.aPopaslType, ASL.fontRequest,
  113.                                                                               ASL.titleText, y.ADR( "Please select a fixed font.." ) );
  114.                                                                pop3 := mb.End();
  115.                                                      mb.Child; mb.keyLabel2("Fixed Font:", "i");
  116.                                                      mb.Child; mb.PopaslObject;
  117.                                                                  mb.Tag( m.aPopstringString); mb.keyString(NIL, 256, "i" );
  118.                                                                  mb.Tag( m.aPopstringButton); mb.popButton(m.iPopUp);
  119.                                                                  mb.TagItem3( m.aPopaslType, ASL.fontRequest,
  120.                                                                               ASL.titleText, y.ADR( "Please select a fixed font.." ),
  121.                                                                               ASL.foFixedWidthOnly, e.true );
  122.                                                                pop4 := mb.End();
  123.                                                      mb.Child; mb.keyLabel2("Thanks To:", "n" );
  124.                                                      mb.Child; mb.PopobjectObject;
  125.                                                                  mb.Tag( m.aPopstringString); mb.keyString(NIL, 256, "n" );
  126.                                                                  mb.Tag( m.aPopstringButton); mb.popButton(m.iPopUp);
  127.                                                                  mb.TagItem3( m.aPopobjectStrObjHook, StrObjHook,
  128.                                                                               m.aPopobjectObjStrHook, ObjStrHook,
  129.                                                                               m.aPopobjectWindowHook, WindowHook );
  130.                                                                  mb.Tag( m.aPopobjectObject ); mb.ListviewObject;
  131.                                                                                                  mb.Tag( m.aListviewList ); mb.ListObject;
  132.                                                                                                                               mb.InputListFrame;
  133.                                                                                                                               mb.TagItem( m.aListSourceArray, y.ADR( popNames) );
  134.                                                                                                                             mb.end;
  135.                                                                                                plist := mb.End();
  136.                                                                pop5 := mb.End();
  137.                                                    mb.end; (* ColGroup(2) *);
  138.                                        mb.end; (* VGroup *)
  139.                   window := mb.End(); (* WindowObjects *)
  140.   app := mb.End(); (* ApplicationObject *);
  141.   IF app # NIL THEN
  142.     m.DoMethod( window, m.mNotify, m.aWindowCloseRequest, e.true,
  143.                 app, 2, m.mApplicationReturnID, m.vApplicationReturnIDQuit );
  144.     m.DoMethod( window, m.mWindowSetCycleChain, pop1, pop2, pop3, pop4, pop5, NIL );
  145.     (* A double click terminates the popping lsit with a succesful return value *)
  146.     m.DoMethod( plist, m.mNotify, m.aListviewDoubleClick, e.true,
  147.                 pop5, 2, m.mPopstringClose, e.true );
  148.     mb.Set( window, m.aWindowOpen, e.true );
  149.     WHILE running DO
  150.       CASE m.DOMethod( app, m.mApplicationInput, y.ADR( signals )) OF
  151.         | m.vApplicationReturnIDQuit :
  152.           mb.Get( pop1, m.aPopaslActive, active );
  153.             IF active = e.false THEN mb.Get( pop2, m.aPopaslActive, active ); END;
  154.             IF active = e.false THEN mb.Get( pop3, m.aPopaslActive, active ); END;
  155.             IF active = e.false THEN mb.Get( pop4, m.aPopaslActive, active ); END;
  156.             IF active = e.false THEN mb.Get( pop5, m.aPopaslActive, active ); END;
  157.           IF active # e.false THEN
  158.             IF m.Request( app, window, 0, NIL, "OK", "Cannot quit now, still\nsome als popups opened." ) = 0 THEN END;
  159.           ELSE
  160.             running := FALSE;
  161.           END;
  162.       ELSE END;
  163.       IF running & (signals # LONGSET{}) THEN signals := e.Wait( signals ) END;
  164.     END;
  165.     mb.Set( window, m.aWindowOpen, e.false );
  166.   ELSE
  167.     Dos.PrintF( "Failed to create Application.\n" );
  168.     m.DisposeObject( window );
  169.   END;
  170. CLOSE
  171.   IF app # NIL THEN m.DisposeObject( app ) END;
  172. END PopupDemo.
  173.  
  174.